package com.icekrvams.air

import android.app.Activity
import android.content.ActivityNotFoundException
import android.content.Context
import android.content.Intent
import android.net.Uri

/**
 * 跳转到指定应用（packageName）的 Play Store 主页。
 */
object GPManager {

    private const val PLAY_APP_PREFIX = "https://play.google.com/store/apps/details?id="

    /**
     * 启动 PlayStore，并深度链接到 [packageName] 对应的应用的主页。
     * @param packageName 目标应用的包名。
     * @param utmCampaign 推荐源描述，一般为当前应用名称或某个推荐位的描述，取决于实际安排。
     * @return 指示是否能够成功启动。
     */
    @JvmOverloads
    fun viewAppInGooglePlay(
        context: Context,
        packageName: String,
        utmCampaign: String? = null
    ): Boolean {
        getQuery(packageName, utmCampaign).apply {
            return viewByQuery(context, this)
        }
    }

    /**
     * 启动 Play Store，并深度链接到 query 对应的应用的主页。
     * @param context 当前上下文。
     * @param query [getQuery]
     */
    private fun viewByQuery(
        context: Context,
        query: String,
    ): Boolean {
        val intent = Intent(Intent.ACTION_VIEW)
            .setPackage("com.android.vending")
            .setData(Uri.parse(query))
        if (context !is Activity) {
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
        }
        return try {
            context.startActivity(intent)
            true
        } catch (e: ActivityNotFoundException) {
            e.printStackTrace()
            false
        }
    }

    /**
     * 获取用于启动应用 Play Store 主页的深度链接。
     * @param packageName 目标应用的包名。
     * @param utmCampaign 推荐源描述，一般为当前应用名称或某个推荐位的描述，取决于实际安排。
     */
    private fun getQuery(packageName: String, utmCampaign: String?) = utmCampaign?.let {
        "$PLAY_APP_PREFIX$packageName&referrer=utm_source%3Dappcross%26utm_medium%3Drecommend%26utm_campaign%3D$it"
    } ?: "$PLAY_APP_PREFIX$packageName"
}
